package br.com.divulgaqui.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.divulgaqui.client.MarcaServiceBeanLocal;
import br.com.divulgaqui.client.exception.EntityIgualException;
import br.com.divulgaqui.entity.Marca;

import com.ocpsoft.pretty.faces.annotation.URLAction;
import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;

@ManagedBean
@ViewScoped
@URLMappings(mappings={
		  @URLMapping(id = "cadastroMarca", pattern = "/admin/marca/cadastro", viewId = "/admin/marca/cadastro.jsf")
		})
public class MarcaManagedBean extends BaseBean{	
	
	private static final long serialVersionUID = 1L;
	private Marca marca;
	private Marca marcaSelecionada;
	private List<Marca> marcas;
	private List<Marca> marcasComplete;
	
	@EJB
	private MarcaServiceBeanLocal marcaServiceBeanLocal;
	
	public MarcaManagedBean(){
	}
	
	@PostConstruct
	public void init(){
		marca = new Marca();
		setMarcaSelecionada(new Marca());
		setMarcas(new ArrayList<Marca>());		
	}
	
	/**
	 * Inclui uma marca
	 */
	public void salvar(){
		try {
			marcaServiceBeanLocal.salvar(marca);
			marca = new Marca();
			carregarMarcas();
			addMensagem(FacesMessage.SEVERITY_INFO, "Marca", "Cadastrada com sucesso.");
		} catch (EntityIgualException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Marca", "Marca com nome \""+marca.getNome()+"\" já foi cadastrada.");
		}
	}
	
	/**
	 * Atualiza uma marca
	 */
	public void atualizar(){
		try {
			marcaServiceBeanLocal.atualizar(marcaSelecionada);
			addMensagem(FacesMessage.SEVERITY_INFO, "Marca", "Atualizada com sucesso.");
			marcaSelecionada = new Marca();
			carregarMarcas();
		} catch (EntityIgualException e) {
			addMensagem(FacesMessage.SEVERITY_ERROR, "Marca", "Marca com nome \""+marcaSelecionada.getNome()+"\" já foi cadastrada.");
			carregarMarcas();
		}
	}	
	
	/**
	 * Torna a marca inativa
	 */
	public void excluir(){
		marcaSelecionada.setAtivo(false);
		marcaServiceBeanLocal.atualizar(marcaSelecionada);
		addMensagem(FacesMessage.SEVERITY_INFO, "Marca", "Atualizada com sucesso.");
		carregarMarcas();
	}
	
	/**
	 * Lista marcas
	 */
	@URLAction(mappingId="cadastroMarca",onPostback=false)
	public void carregarMarcas(){
		marcas = marcaServiceBeanLocal.listarMarcas();
	}
	
	/**
	 * Pesquisa as marcas que conferem com o texto informado
	 * e retorna a lista
	 * @param texto
	 * @return result
	 */
	public List<Marca> complete(String texto){
		if(marcasComplete == null){
			marcasComplete = marcaServiceBeanLocal.listarMarcasAtiva();
		}
		List<Marca> result = new ArrayList<Marca>();		
		for (Marca marca : marcasComplete) {
			if ((marca.getNome() != null && marca.getNome().toLowerCase()
					.indexOf(texto.toLowerCase()) == 0)
					|| "".equals(texto)) {
				result.add(marca);
			}
		}
		return result;
	}

	//====================== Get e Set ====================//
	
	public Marca getMarca() {
		return marca;
	}
	
	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public List<Marca> getMarcas() {
		return marcas;
	}

	public void setMarcas(List<Marca> marcas) {
		this.marcas = marcas;
	}

	public Marca getMarcaSelecionada() {
		return marcaSelecionada;
	}

	public void setMarcaSelecionada(Marca marcaSelecionada) {
		this.marcaSelecionada = marcaSelecionada;
	}
}
